package com.taxue.designpattern.lession101;

/**
 * 
1.工厂（Creator）角色 
		简单工厂模式的核心，它负责实现创建所有实例的内部逻辑。
		工厂类可以被外界直接调用，创建所需的产品对象。 
2.抽象（Product）角色 
		简单工厂模式所创建的所有对象的父类，它负责描述所有实例所共有的公共接口。 
3.具体产品（Concrete Product）角色 
		简单工厂模式所创建的具体实例对象
		
简单工厂模式的缺点：
				  由于工厂类集中了所有实例的创建逻辑，   所以“高内聚”方面做的并不好。
				   当系统中的具体产品类不断增多时，可能会出现要求工厂类也要做相应的修改，
				   扩展性并不很好。 		

 *
 */
public class MainClass {
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		
		System.out.println("======实例化=============");
		// 实例化一个Apple
		Apple apple = new Apple();
		apple.get();
		// 实例化一个Banana
		Banana banana = new Banana();
		banana.get();
		System.out.println("======多态=============");
		//实例化一个Apple,用到了多态
		Fruit apple01 = new Apple();
		Fruit banana01 = new Banana();
		apple01.get();
		banana01.get();
		
		System.out.println("======实例化一个Apple=============");
		//实例化一个Apple
		Fruit apple02 = FruitFactory.getApple();
		Fruit banana02 = FruitFactory.getBanana();
		apple02.get();
		banana02.get();
		
		System.out.println("====== FruitFactory 实例化一个Apple=============");
 		Fruit apple03 = FruitFactory.getFruit("Apple");
		Fruit banana03 = FruitFactory.getFruit("Banana");
		apple03.get();
		banana03.get(); 
		
		System.out.println("====== 反射 实例化一个Apple=============");
 		Fruit apple04 = FruitFactory.getFruitFs("com.taxue.designpattern.lession101.Apple");
		Fruit banana04 = FruitFactory.getFruitFs("com.taxue.designpattern.lession101.Banana");
		apple04.get();
		banana04.get(); 
	}
}

